Supongamos la función:
int alerta(string mensaje) { cout << "ALERTA: " << mensaje << endl; return 0; }
Esta función tiene como objetivo mostrar un mensaje de alerta y nada más. Esa es su utilidad. El valor que devuelve, de hecho, está para "rellenar" ya que no significa nada. Como que las funciones tienen que devolver algo, hemos puesto el tipo int y luego el return 0 porque estamos obligados.
Para llamar a la función, deberíamos hacer así:
int x = alerta("El mundo desparecerá en 8 minutos");
Pero la variable x solo la necesitamos para recoger el resultado que devuelve la función alerta, que hemos dicho que no sirve para nada en particular.
Una cosa que se puede hacer en C++ es desechar el resultado de una función. En el caso anterior, podemos llamar a la función así:
alerta("El mundo desaparecerá en 8 minutos");
es decir, sin introducir la variable inútil x. Esto ya es un alivio. De todas maneras, desechamos el resultado porque lo que queríamos conseguir (sacar una alerta por pantalla) ya lo hemos conseguido.
Por ejemplo, se puede llamar a la función sqrt así:
sqrt(5.0);
y esto no será demasiado útil, porque el único objetivo de llamar a sqrt era, precisamente, obtener el valor de la raíz de 5. sqrt no hace nada más que eso.
O sea, se ve claro que hay funciones que "hacen algo más" aparte de devolver un resultado. A éstas se las denomina "acciones". Profundizaremos más en la Definición de Acción más adelante, pero por ahora ahí queda el ejemplo.
De todas maneras, la forma correcta de proceder sería, realmente, indicar de alguna manera que la acción alerta no devuelve nada. En C++ eso se puede expresar utilizando un tipo de retorno especial: void.
En realidad, la acción alerta debería ser:
void alerta(string mensaje) { cout << "ALERTA: " << mensaje << endl; }
donde los cambios con respecto a la primera versión son:
El tipo void significa algo como "vacío", es decir: "nada". En vez de no poner tipo de retorno, de todas maneras, es obligatorio poner void.
En realidad, en una función que devuelve void aún se puede poner una instrucción con return pero no se pone ninguna expresión al lado, o sea sería:
return;
De todas maneras, si alerta fuera:
void alerta(string mensaje) { cout << "ALERTA: " << mensaje << endl; return; }
No hay ningún cambio. Es lo mismo hacer return en la última instrucción que dejar que llege a la última instrucción sin poner nada. En este caso, entonces, es preferible la versión más corta. Aún así, hay casos donde poner return antes de llegar al final puede tener sentido.
En preparación